home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 9 / Night Owl CD-ROM (NOPV9) (Night Owl Publisher) (1993).ISO / 039a / netpq203.zip / NOS.H < prev    next >
C/C++ Source or Header  |  1992-03-10  |  17KB  |  408 lines

  1. /*
  2. //
  3. // NOS.H
  4. //
  5. // (c) Copyright 1989, 1990, 1991 Artisoft Inc.
  6. // (c) Copyright 1990, 1991 Adrian King.
  7. //
  8. // $Header:   C:/USR/LANBOOK/SRC/H/VCS/NOS.H_V   1.0   29 Aug 1991 13:26:16  $
  9. //
  10. // $Log:   C:/USR/LANBOOK/SRC/H/VCS/NOS.H_V  $
  11. //
  12. //   Rev 1.0   29 Aug 1991 13:26:16
  13. //Initial revision.
  14. //
  15. // Header file for LANtastic specific structures and constants.
  16. // All of these definitions are derived from information published
  17. // by Artisoft on their support bulletin board (Tel: 602 293 0065)
  18. // within the LANtastic NOS conference. (See the file TECH.ZIP for
  19. // the original source of the information.) 
  20. //
  21. // As such, much of this material is (c) copyright Artisoft Inc.
  22. // The translation to the C language is (c) Adrian King. Artisoft
  23. // kindly granted permission to use their material for the translation.
  24. // However, any mistakes are definitely (c) Adrian King.
  25. //
  26. // Wherever possible, mnemonics and definitions used within the
  27. // original Artisoft (assembler based) document have been retained.
  28. // C types, structure definitions and additional mnemonics have been 
  29. // added where it makes sense.
  30. //
  31. // This file has been used successfully with both Borland Turbo C
  32. // and Microsoft C compilers. 
  33. // 
  34. */
  35.  
  36.     // Type definitione
  37.  
  38. #ifndef WINDOWS
  39. typedef unsigned char BYTE;        // Single byte
  40. typedef void (far *FARPROC)();    // Pointer to far void procedure
  41. typedef short BOOL;                // Boolean. Set TRUE or FALSE.
  42. typedef unsigned short WORD;    // 16 bit quantity
  43. typedef unsigned long DWORD;    // 32 bit quantity
  44. #endif
  45.  
  46.     // Constant definitions
  47.         
  48. #ifndef    D_NAMESZ    
  49. #define    D_NAMESZ    16            // Length of a name
  50. #endif
  51.  
  52. #include "ncb.h"                // Defines NetBIOS NCB stuff
  53.  
  54.     // User account structure
  55.  
  56. struct user_account    {
  57.     BYTE    UA_name[D_NAMESZ];            // Zero padded username
  58.     BYTE    UA_internal[D_NAMESZ];        
  59.     BYTE    UA_description[32];            // Full user description
  60.     BYTE    UA_privilege;                // Privilege bits 
  61.                                         // (see definitions below)
  62.     BYTE    UA_concurrent;                // Maximum concurrent log ins
  63.     BYTE    UA_allowed_times[42];        // 1 bit for each half hour for 7 
  64.                                         // days. Week begins Sunday.
  65.                                         // 0 means allowed.
  66.     WORD    UA_internal2;
  67.     WORD    UA_last_login_time[2];        // Last time logged in
  68.     WORD    UA_account_expiration[2];     // Expiration date (MSDOS-format)
  69.                                         // Year, Month:Day
  70.     WORD    UA_password_expiration[2];    // Expiration date (as above)
  71.                                         // 0 means no expiration date.
  72.     BYTE    UA_password_extension;        // 1-31  Number of days to reextend
  73.                                         // password after change, 0 says no 
  74.                                         // extension required
  75.     BYTE    UA_undelete_char;            // First letter of UA_name when  
  76.                                         // account is deleted (first 
  77.                                         // character of UA_name is replaced 
  78.                                         // with a zero.)
  79.     BYTE    UA_xprivilege;                // Extended privilege
  80.     BYTE    UA_future[3];        
  81. };
  82.  
  83.     // Privilege bits for UA_privilege:
  84.  
  85. #define UA_privilege_superACL    0x80    // Bypass ACLs
  86. #define UA_privilege_superqueue 0x40    // Bypass queue protection
  87. #define UA_privilege_peer       0x20    // Treat as local process
  88. #define UA_privilege_supermail  0x10    // Bypass mail protection
  89. #define UA_privilege_audit      0x08    // User can create audit entries
  90. #define UA_privilege_system     0x04    // User has system manager privileges
  91. #define UA_xprivilege_nopwchange 0x01   // User cannot change password
  92.  
  93. #define    MB_textlen    80                    // Length of message text buffer
  94.  
  95.                                         // Message buffer structure
  96. struct message_buffer     {
  97.     BYTE    MB_reserved;                // Reserved field used by system call
  98.     BYTE    MB_type;                    // User defined message type 
  99.                                         // (see below)
  100.     BYTE    MB_machine[D_NAMESZ];        // Machine name destination
  101.     BYTE    MB_server[D_NAMESZ];        // User must be logged into this
  102.                                         // server
  103.     BYTE    MB_user[D_NAMESZ];            // User must be using this username
  104.     BYTE    MB_originator[D_NAMESZ];    // Originator's machine name. 
  105.                                         // Filled when message is received
  106.     BYTE    MB_text[MB_textlen];        // Message text
  107. };
  108.  
  109.     // Message buffer type.  
  110.  
  111. #define    MBT_general    0                    // General msg used by NET and others
  112. #define MBT_warning    1                    // Server warning message
  113.  
  114.     // Message service disposition
  115.  
  116. #define    MPB_beep        0x01            // Beep before delivering message
  117. #define    MPB_deliver        0x02            // Deliver to message service
  118. #define MPB_auto_pop_up    0x04            // Pop up messages automatically
  119.  
  120.     // Definition of a queue entry:
  121.  
  122. struct queue_entry {
  123.     BYTE    QE_status;                    // Status of queue entry
  124.     DWORD    QE_size;                    // Size of spooled file
  125.     BYTE    QE_type;                    // Type of queue entry
  126.     BYTE    QE_output_control;            // Control of despooled file
  127.     WORD    QE_copies;                    // Number of copies
  128.     DWORD    QE_sequence;                // Sequence number of queue entry
  129.     BYTE    QE_spooled_file[48];        // Pathname of spooled file
  130.     BYTE    QE_user[D_NAMESZ];            // Username who spooled file
  131.     BYTE    QE_machine[D_NAMESZ];        // Machine name user was on
  132.     WORD    QE_date;                    // Date file spooled (MS-DOS format)
  133.     WORD    QE_time;                    // Time file spooled (MS-DOS format)
  134.     BYTE    QE_destination[D_NAMESZ+1];    // ASCIZ Device or username destn.
  135.     BYTE    QE_comment[48];                // Comment field
  136. };
  137.  
  138.     // Different queue entry statuses:
  139.  
  140. #define    QE_status_free            0    // The queue entry is empty
  141. #define    QE_status_update        1    // The queue entry is being updated
  142. #define    QE_status_hold            2    // The queue entry is held
  143. #define    QE_status_wait            3    // The queue entry is waiting for despool
  144. #define    QE_status_active        4    // The queue entry is being despooled
  145. #define    QE_status_cancel        5    // The queue has been canceled
  146. #define    QE_status_file_error    6    // The spooled file could not be accessed
  147. #define    QE_status_spool_error    7    // The destination could not be accessed
  148. #define    QE_status_rush            8    // Rush this job
  149.     
  150.     // Different types of queue entries:
  151.     
  152. #define    QE_type_print        0    // Spooled printer queue file
  153. #define    QE_type_message        1    // Spooled message (mail)
  154. #define    QE_type_local_file    2    // Spooled local file
  155. #define    QE_type_remote_file    3    // Spooled remote file
  156. #define    QE_type_modem        4    // Spooled to remote modem
  157. #define    QE_type_batch        5    // Spooled batch processor file
  158.  
  159.     // Definitions for output control:
  160.  
  161. #define QE_OC_keep    0x40    // Keep after despooling (don't delete)
  162.                             // Used for mail - allow delete only by owner
  163.  
  164.     // Definitions for mail
  165.  
  166. #define    QE_OC_voice                 0x20    // Mail file contains voice data
  167. #define QE_OC_opened             0x10    // Message has been read
  168. #define QE_OC_request_response     0x04    // Response requested
  169.  
  170.     // Control queue commands.
  171.  
  172. #define    CQ_start            0    // Start despooling
  173. #define    CQ_halt                1    // Halt despooling
  174. #define CQ_halt_EOJ            2    // Halt despooling at end of job
  175. #define    CQ_pause            3    // Pause the despooler at end of job
  176. #define    CQ_single            4    // Print single job
  177. #define CQ_restart            5    // Restart the current print job
  178. #define CQ_cancel            6    // Cancel the currently printing job
  179. #define CQ_hold                7    // Hold the queue entry
  180. #define    CQ_release            8    // Release a held queue entry
  181. #define    CQ_rush                9    // Make the queue entry a rushed job
  182.  
  183.  
  184.     // Definition of printer states:
  185.  
  186. struct printer_state {
  187.     BYTE    PS_state_pause:1;    // Set 1 when printer paused
  188.     BYTE    PS_state_value:7;    // Set to PS_state_ value (see below)
  189. };
  190.  
  191. #define    PS_state_disabled    0    // Printer is disabled
  192. #define    PS_state_single_job    1    // Printer will stop at end of job
  193. #define    PS_state_multijob    2    // Printer should print multiple jobs
  194.  
  195.     // Definition of a printer status entry:
  196.  
  197. struct PS {
  198.                             // Printer state
  199.     struct    printer_state    PS_state;        
  200.     WORD    PS_index;        // Queue index corresponding to print job 
  201.                             // being despooled. -1 if not despooling.
  202.     WORD    PS_CPS;            // Actual characters per second being output
  203.     DWORD    PS_output_chars;// Characters actually output so far
  204.     DWORD    PS_read_chars;    // Characters actually read from despooled 
  205.                             // file so far. May be used to compute 
  206.                             // percent completed.
  207.     WORD    PS_copies;        // Copies remaining to print
  208. };
  209.  
  210.     // Definition of logical stream entry:
  211.  
  212. struct logical_stream {
  213.     BYTE    LS_queue;        // 0 Disabled, non-zero Enabled
  214.     BYTE    LS_template[13];// Template may contain ?'s (include "." as 
  215.                             // in @???????.???)
  216. };
  217.  
  218.     // Definition of active user entry:
  219.  
  220. struct active_user_entry {
  221.     WORD    AUE_VCID;                // Virtual circuit number
  222.     BYTE    AUE_state;                // Login state (defined below)
  223.     BYTE    AUE_command;               // Last command issued
  224.     BYTE    AUE_IO[5];                // Number of I/O bytes (40 bit number)
  225.     BYTE    AUE_requests[3];        // Number of server requests (24 bits)
  226.     BYTE    AUE_name[D_NAMESZ];        // Name of logged in user
  227.     BYTE    AUE_machine[D_NAMESZ];    // Name of remote logged in machine
  228.     BYTE    AUE_xprivilege;            // Extended privileges
  229.     WORD    AUE_time_left;            // Time left in minutes
  230. };
  231.  
  232.     // Definition of the various login states and privileges:
  233.  
  234. #define AUE_state_starting             0x00    // We are in the middle of login
  235. #define AUE_state_in                 0x01    // We are fully logged in
  236. #define AUE_state_RPL                 0x02    // Remote program load login
  237.  
  238. #define AUE_privilege_superACL         0x80    // Bypass ACLs
  239. #define AUE_privilege_superqueue    0x40    // Bypass queue protection
  240. #define AUE_privilege_peer           0x20    // Treat as local process
  241. #define AUE_privilege_supermail      0x10    // Bypass mail protection
  242. #define AUE_privilege_audit          0x08    // User can create audit entries
  243. #define AUE_privilege_system         0x04    // User has system manager privs
  244. #define AUE_xprivilege_nopwchange    0x01    // User cannot change his password
  245.  
  246.     // Active user entry commands:
  247.  
  248. #define AUEC_login                0    // Login into a server
  249. #define AUEC_terminate            1    // Process termination
  250. #define AUEC_open                2    // Open a file
  251. #define AUEC_close                3    // Close a file
  252. #define AUEC_create                4    // Create a file if it's there or not
  253. #define AUEC_new                5    // Create a new file that is not there
  254. #define AUEC_unique                6    // Create a unique file
  255. #define AUEC_commit                7    // Commit disk data to disk
  256. #define AUEC_read                8    // Read from file
  257. #define AUEC_write                9    // Write to file
  258. #define AUEC_delete                10    // Delete file
  259. #define AUEC_set_attr            11    // Set file attributes
  260. #define AUEC_lock                12    // Lock byte range
  261. #define AUEC_unlock                13    // Unlock byte range
  262. #define AUEC_create_dir            14    // Create a subdirectory
  263. #define AUEC_delete_dir            15    // Delete a subdirectory
  264. #define AUEC_rename_file        16    // Rename a file
  265. #define AUEC_find_first            17    // Find first matching file
  266. #define AUEC_find_next            18    // Find the next matching file
  267. #define AUEC_disk_free            19    // Get disk free space
  268. #define AUEC_get_queue            20    // Get a queue entry
  269. #define AUEC_set_queue            21    // Set a queue entry
  270. #define AUEC_control_queue        22    // Control the queue
  271. #define AUEC_get_login            23    // Return login information
  272. #define AUEC_get_link            24    // Return link description
  273. #define AUEC_seek                25    // Seek to a file position
  274. #define AUEC_get_time            26    // Get server's time
  275. #define AUEC_audit                27    // Create audit entry
  276. #define AUEC_multi_open            28    // Open file in a multitude of modes
  277. #define AUEC_change_password    29    // Change a password
  278. #define AUEC_disable_account    30    // Disable account from further log ins
  279. #define AUEC_copy_file            31    // Local server file copy
  280. #define AUEC_get_username        32    // Get a username from account file
  281. #define AUEC_translate_path        33    // Translate a server's logical path
  282. #define AUEC_create_indirect    34    // Make indirect file
  283. #define AUEC_get_indirect        35    // Get indirect file text
  284. #define AUEC_printer_status        36    // Printer status obtained
  285. #define AUEC_get_stream            37    // Get logical print stream information
  286. #define AUEC_set_stream            38    // Set logical print stream information
  287. #define AUEC_get_account        39    // Get an account record
  288. #define AUEC_shutdown            40    // Request server shutdown
  289. #define AUEC_cancel_shutdown    41    // Cancel server shutdown
  290. #define AUEC_stuff                42    // Stuff server keyboard
  291. #define AUEC_write_with_commit    43    // Commit data to disk
  292.  
  293.     // ACL bit definition:
  294.  
  295. #define ACL_read        0x8000    // (R) Allow reading
  296. #define    ACL_write        0x4000    // (W) Allow writing
  297. #define ACL_create_file 0x2000    // (C) Allow file creation
  298. #define ACL_create_dir  0x1000    // (M) Allow directory creation
  299. #define ACL_lookup      0x0800    // (L) Allow lookups
  300. #define ACL_delete_file    0x0400    // (D) Allow file deletion
  301. #define ACL_delete_dir  0x0200    // (K) Allow directory deletion
  302. #define ACL_rename      0x0100    // (N) Allow file renaming
  303. #define ACL_execute     0x0080    // (E) Allow program execution
  304. #define ACL_physical    0x0040    // (P) Allow physical access
  305. #define ACL_attribute   0x0020    // (A) Allow attribute changing
  306. #define ACL_indirect    0x0010    // (I) Allow indirect file expansion
  307.  
  308.     // Definition of time buffer:
  309.  
  310. struct time_block {
  311.     WORD    TB_year;        // Year
  312.     BYTE    TB_day;            // Day of month (1-31)
  313.     BYTE    TB_month;        // Month (1-12)
  314.     BYTE    TB_minutes;        // Minutes (0-59)
  315.     BYTE    TB_hour;        // Hour (0-23)
  316.     BYTE    TB_hundredths;    // Hundredths of seconds (0-99)
  317.     BYTE    TB_seconds;        // Seconds (0-59)
  318. };
  319.  
  320.     // Definition of server shutdown option flags
  321.  
  322. #define SHUTDOWN_option_reboot        0x0001    // Reboot after shutdown
  323. #define SHUTDOWN_option_silent        0x0002    // Do not notify users
  324. #define SHUTDOWN_option_halt        0x0004    // Halt after shutdown
  325. #define SHUTDOWN_option_powerfail    0x0008    // Shutdown due to power fail
  326.                                             // (Used by UPS.)
  327. #define SHUTDOWN_option_reserved1    0x0010    // RESERVED
  328. #define SHUTDOWN_option_reserved2    0x0020
  329. #define SHUTDOWN_option_reserved3    0x0040
  330. #define SHUTDOWN_option_reserved4    0x0080
  331. #define SHUTDOWN_option_user1        0x0100    // User definable
  332. #define SHUTDOWN_option_user2        0x0200
  333. #define SHUTDOWN_option_user3        0x0400
  334. #define SHUTDOWN_option_user4        0x0800
  335. #define SHUTDOWN_option_user5        0x1000
  336. #define SHUTDOWN_option_user6        0x2000
  337. #define SHUTDOWN_option_user7        0x4000
  338. #define SHUTDOWN_option_reserved5    0x8000    // RESERVED
  339.  
  340.     // Multiplex interrupt (2F) calls
  341.  
  342. #define NOS_Presence            0xb800    // NOS loaded?
  343. #define NOS_Share_Presence        0x1000    // SHARE loaded?
  344. #define    NOS_Get_Version            0xb809    // Get NOS version numbers
  345.  
  346.     // Interrupt 2A functions
  347.  
  348. #define    NOS_Get_Resources        0x0500    // Get resource information
  349. #define NOS_Set_Combine            0x0601    // Set combined output mode
  350. #define NOS_Set_Separate        0x0602    // Set separated mode
  351. #define NOS_2A_Flush            0x0603    // Flush output
  352.  
  353.     // Interrupt 21 functions for printers
  354.  
  355. #define    NOS_Get_Printer_Mode    0x5D07    // Return printer mode
  356. #define NOS_Set_Printer_Mode    0x5D08    // Set printer mode
  357. #define    NOS_Flush                0x5D09    // Flush output
  358.  
  359.     // DOS compatible network calls
  360.  
  361. #define NOS_Get_Machine_Name    0x5E00    // Get Machine Name
  362. #define NOS_Set_Printer_Setup    0x5E02    // Set Printer Setup
  363. #define NOS_Get_Printer_Setup    0x5E03    // Get Printer Setup
  364. #define NOS_Get_Redir_Device    0x5F02    // Get Redirected Device Entry
  365. #define NOS_Redir_Device        0x5F03    // Redirect Device
  366. #define NOS_Cancel_Redir        0x5F04    // Cancel Device Redirection
  367.  
  368.     //  LANtastic network calls
  369.  
  370. #define NOS_Get_Login        0x5F80    // Get Login Entry
  371. #define NOS_Login            0x5F81    // Login to a Server
  372. #define NOS_Logout            0x5F82    // Logout of a Server
  373. #define NOS_Get_User_Name    0x5F83    // Get Username Entry
  374. #define NOS_Get_Server        0x5F84    // Get Inactive Server Entry
  375. #define NOS_Change_Password    0x5F85    // Change Password
  376. #define NOS_Disable            0x5F86    // Disable Account
  377. #define NOS_Get_Account        0x5F87    // Get Account
  378. #define NOS_Logout_All        0x5F88    // Logout from all servers
  379. #define NOS_Copy_File        0x5F97    // Copy File
  380. #define NOS_Send_Msg        0x5F98    // Send Unsolicited Message
  381. #define NOS_Get_Msg            0x5F99    // Get Last Received Unsolicited Message
  382. #define NOS_Get_Msg_Flag    0x5F9A    // Get Message Processing Flag
  383. #define NOS_Set_Msg_Flag    0x5F9B    // Set Message Processing Flag
  384. #define NOS_Popup_Msg        0x5F9C    // Pop Up Last Received Message
  385. #define NOS_Get_Queue        0x5FA0    // Get Queue Entry
  386. #define NOS_Set_Queue        0x5FA1    // Set Queue Entry
  387. #define NOS_Control_Queue    0x5FA2    // Control Queue
  388. #define NOS_Get_Status        0x5FA3    // Get Printer Status
  389. #define NOS_Get_Stream_Info    0x5FA4    // Get Stream Info
  390. #define NOS_Set_Stream_Info    0x5FA5    // Set Stream Info
  391. #define NOS_Create_Audit    0x5FA7    // Create User Audit Entry
  392. #define NOS_Get_User_Info    0x5FB0    // Get Active User Information
  393. #define NOS_Get_Dir_Info    0x5FB1    // Get Shared Directory Information
  394. #define NOS_Get_User_Acct    0x5FB2    // Get Username From Account File
  395. #define NOS_Translate_Path    0x5FB3    // Translate Path
  396. #define NOS_Create_Indir    0x5FB4    // Create Indirect File
  397. #define NOS_Get_Indir        0x5FB5    // Get Indirect File Contents
  398. #define NOS_Get_Time        0x5FC0    // Get Server's Time
  399. #define NOS_Shutdown        0x5FC8    // Schedule Server Shutdown
  400. #define NOS_Cancel_Shutdown    0x5FC9    // Cancel Server Shutdown
  401. #define NOS_Stuff_Server    0x5FCA    // Stuff Server Buffer
  402. #define NOS_Get_LPT_Timeout    0x5FD0    // Get Redirected Lineprinter Timeout
  403. #define NOS_Set_LPT_Timeout    0x5FD1    // Set Redirected Lineprinter Timeouts
  404. #define NOS_Get_DOS_Vector    0x5FE0    // Get DOS Service Vector
  405. #define NOS_Set_DOS_Vector    0x5FE1    // Set DOS Service Vector
  406. #define NOS_Get_Msg_Vector    0x5FE2    // Get Message Service Vector
  407. #define NOS_Set_Msg_Vector    0x5FE3    // Set Message Service Vector
  408.